factory design pattern in c